.text 
.global _start
_start:
@1 配置RCC: LD1、LD2、LD3和蜂鸣器的使能
LDR R0,=0x50000a28  @指定操作的寄存器地址
LDR R1,[R0]  @将寄存器数据取出来保存到R1中
orr R1, R1, #0x32
STR R1,[R0]  @将修改后的数值写回

LDR R0,=0x50006000  @指定LED1操作的寄存器地址PE10
MOV R2,#10
BL fun_set

LDR R0,=0x50007000  @指定LED2操作的寄存器地址PF10
MOV R2,#10
BL fun_set

LDR R0,=0x50006000  @指定LED3操作的寄存器地址PE8
MOV R2,#8
BL fun_set

LDR R0,=0x50003000  @指定LED4操作的寄存器地址PB6
MOV R2,#6
BL fun_set

B loop

loop:
	LDR R0,=0x50006000  @指定LED1操作的寄存器地址PE10
	MOV R2,#10
	BL LED_ON
    	bl Delay
	BL LED_OFF
	
	LDR R0,=0x50007000  @指定LED2操作的寄存器地址PF10
	MOV R2,#10
	BL LED_ON
    	bl Delay
	BL LED_OFF

	LDR R0,=0x50006000  @指定LED3操作的寄存器地址PE8
	MOV R2,#8
	BL LED_ON
    	bl Delay
	BL LED_OFF
	
	LDR R0,=0x50003000  @指定LED4操作的寄存器地址PB6
	MOV R2,#6
	BL LED_ON
    	bl Delay
	BL LED_OFF	
	b loop
	
	

fun_set:
	@1.GPIOE_MODER[21:20]设置为01，PE10管脚为输出模式
	LDR R1,[R0]  @将寄存器数据取出来保存到R1中
	ADD R3,R3,R3 @将第[21:20]位设置0
	MOV R4,#3
	LSL R4,R3
	BIC R1,R1,R4 @将第20位设置为1  
	MOV R4,#1
	LSL R4,R3
	ORR R1,R1,R4
	STR R1,[R0]  @将修改后的数值写回

	@2.GPIOE_OTYPER[10]设置为0，PE10推挽输出
	ADD R0,#4 @指定操作的寄存器地址
	LDR R1,[R0]  @将寄存器数据取出来保存到R1中
	MOV R4,#1
	LSL R4,R2
	BIC R1,R1,R4  @将第[10]位设置0
	STR R1,[R0]  @将修改后的数值写回

	@3.GPIOE_OSPEEDR[21:20]设置为00，PE10低速输出、
	ADD R0,#4 @指定操作的寄存器地址
	LDR R1,[R0]  @将寄存器数据取出来保存到R1中
	MOV R4,#3
	LSL R4,R3
	BIC R1,R1,R4 @将第[21:20]位设置0
	STR R1,[R0]  @将修改后的数值写回

	@4.GPIOE_PUPDR[21:20]设置为00,PE10输出无上拉下拉电阻
	ADD R0,#4 @指定操作的寄存器地址
	LDR R1,[R0]  @将寄存器数据取出来保存到R1中
	MOV R4,#3
	LSL R4,R3
	BIC R1,R1,R4  @将第[21:20]位设置0
	STR R1,[R0]  @将修改后的数值写回

	
	
	MOV PC,LR


	

	


LED_ON:
	@5.GPIOE_ODR[10]设置为1，PE10输出高电平;设置为0，PE10输出低电平
	ADD R0,#8 @指定操作的寄存器地址
	LDR R1,[R0]  @将寄存器数据取出来保存到R1中
	MOV R4,#1
	LSL R4,R2
	ORR R1,R1,R4  @将第[10]位设置1
	STR R1,[R0]  @将修改后的数值写回
	mov pc,lr  @程序返回
    
LED_OFF:
	@5.GPIOE_ODR[10]设置为1，PE10输出高电平;设置为0，PE10输出低电平
	ADD R0,#8 @指定操作的寄存器地址
	LDR R1,[R0]  @将寄存器数据取出来保存到R1中
	MOV R4,#1
	LSL R4,R2
	bic R1,R1,R4  @将第[10]位设置0
	STR R1,[R0]  @将修改后的数值写回
	mov pc,lr  @程序返回

@延时函数
Delay:
    LDR r3,=0X10000000
MM:
    CMP R3,#0
    subne r3,r3,#1
    bne MM
    MOV PC,LR

.end
	
